#include <iostream>
#include <vector>
using namespace std;
const int N=1e5+10;


int n;
int son[N*32][2];
int dist[N];
int idx;
vector<pair<int,int>> edge[N];
void dfs(int u,int father,int sum)
{
	dist[u]=sum;
	for(auto& e:edge[u])
	{
		int x=e.first;
		int w=e.second;
		if(x==father)
			continue;
		dfs(x,u,sum^w);
	}
}
void insert(int num)
{
	int p=0;
	for(int i=31;i>=0;i--)
	{
		int t=num>>i&1;
		if(!son[p][t])
			son[p][t]=++idx;
		p=son[p][t];
	}
}

int query(int num)
{
	int ret=0,p=0;
	for(int i=31;i>=0;i--)
	{
		int t=num>>i&1;
		if(son[p][!t])
		{
			ret|=1<<i;
			p=son[p][!t];
		}
		else{
			p=son[p][t];
		}
	}
	return ret;
}
int main()
{
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int x,y,w;
		scanf("%d%d%d",&x,&y,&w);
		edge[x].push_back({y,w});
		edge[y].push_back({x,w});
	}
	
	dfs(0,-1,0);
	for(int i=0;i<n;i++)
		insert(dist[i]);
	int ret=0;
	for(int i=0;i<n;i++)
	{
		ret=max(ret,query(dist[i]));
	}
	cout<<ret<<endl;
	return 0;
}
